package de.hub.emffrag.mongodb; import java.net.UnknownHostException; import java.util.HashMap; import java.util.Map; import org.eclipse.core.runtime.Plugin; import org.eclipse.emf.common.util.URI; import org.eclipse.emf.ecore.resource.Resource; import org.osgi.framework.BundleContext; import com.mongodb.DB; import com.mongodb.MongoClient; import com.mongodb.ReadPreference; import de.hub.emffrag.datastore.DataStoreImpl; import de.hub.emffrag.datastore.IDataStore; import de.hub.emffrag.datastore.ScanningDataStore; import de.hub.emffrag.fragmentation.FragmentedModelFactory; public class EmfFragMongoDBActivator extends Plugin { public static EmfFragMongoDBActivator instance = null; public boolean useScanning = false; private Map<String, DB> dataBases = new HashMap<String, DB>(); @Override public void start(BundleContext context) throws Exception { super.start(context); instance = this; init(); } public DB getDataBase(String host, int port) { DB dataBase = dataBases.get(host + port); if (dataBase == null) { MongoClient dbClient; try { ReadPreference.nearest(); if (port != -1) { dbClient = new MongoClient(host, port); } else { dbClient = new MongoClient(host); } } catch (UnknownHostException e) { throw new IllegalArgumentException("Given host does not exists or DB is not running: " + host); } dataBase = dbClient.getDB("emffrag"); dataBases.put(host+port, dataBase); } return dataBase; } private void init() { Map<String, Object> protocolToFactoryMap = Resource.Factory.Registry.INSTANCE.getProtocolToFactoryMap(); protocolToFactoryMap.put("mongodb", new FragmentedModelFactory() { @Override protected IDataStore createDataStore(URI uri) { MongoDBDataStore baseDataStore = new MongoDBDataStore(uri.authority(), uri.path().substring(1)); if (useScanning) { return new DataStoreImpl(new ScanningDataStore(baseDataStore, baseDataStore), uri); } else { return new DataStoreImpl(baseDataStore, uri); } } }); } public static void standalone() { if (instance == null) { instance = new EmfFragMongoDBActivator(); instance.init(); } } }